首先打開 Let’s Encrypt 的官網

這邊寫說如果可以連進去主機用指令操作的話,推薦使用 Certbot 來設定憑證
點一下 Certbot 的連結,然後選則伺服器軟體和作業系統
選完底下會出現 安裝教學
包含一些注意事項
請先購買網域並且設定好 DNS,也就是要可以使用網址開啟網站
EC2 預設的子網域無法申請憑證EC2 預設的子網域無法申請憑證EC2 預設的子網域無法申請憑證
AWS 可以使用 CloudFront 設定憑證,不用自己搞東搞西AWS 可以使用 CloudFront 設定憑證,不用自己搞東搞西AWS 可以使用 CloudFront 設定憑證,不用自己搞東搞西
第一步
用 SSH 連線進伺服器

恩恩,連好了
第二步
安裝 Snap 套件管理程式
在安裝之前先更新一下套件
sudo apt update && sudo apt upgrade

安裝 snapd
sudo apt install -y snapd

重新開啟終端機,重新連線,確保 Snap 路徑更新
安裝 Snap 核心
sudo snap install core

安裝 hello-world 測試 Snap 是否有正確運作
sudo snap install hello-world

測試 Snap
hello-world

第三步
移除用 apt 安裝的 Certbot
看起來很堅持要用 Snap 呢
完整移除 Certbot
sudo apt purge certbot && sudo apt autoremove --purge

我沒裝過所以啥也沒有移除
第四步
安裝 Certbot
sudo snap install --classic certbot

第五步
建立指令軟連結
sudo ln -s /snap/bin/certbot /usr/bin/certbot

第六步
自動設定或是自己設定
手動設定會快很多,加上 d 參數設定網域
sudo certbot certonly -d ec2-54-238-160-84.ap-northeast-1.compute.amazonaws.com --nginx

這邊不是憑證上的 Email,是用來做安全性通知的,可以輸入 c 跳過,我輸入了我的 Email

閱讀服務條款,沒問題後就輸入 Y 同意

是否要接收其他 Email 通知,N 我不接受

看來一定要有網域才能簽呢,我先去生個子網域
再試一次
sudo certbot certonly -d 2023ironman.miku3920.net --nginx

這是因為沒有設定 DNS,要將 Domain 指向 IP
還有一個原因是昨天的設定把所有「.」開頭的路徑擋掉了
在根目錄設定前加上這段
location ~ /\.well-known/acme-challenge/ {
allow all;
}

記得重新載入設定檔
sudo systemctl reload nginx
新增一個檔案進去測試看看
不再是 404 表示可以讀取裡面的檔案了

設定成功會像這樣
最後要手動設定憑證
在 /etc/nginx/sites-available/ 新增一個網域的檔案
然後開啟一個 神奇的網站
選擇伺服器版本就會出現範例的設定,複製貼上到剛剛的檔案
把 default_server 砍掉加上 server_name,也就是你的網域
將剛剛申請好的憑證路徑放到 ssl_certificate, ssl_certificate_key, ssl_trusted_certificate

中間有個檔案要下載,輸入它給的指令,路徑我決定放在 /etc/nginx/cert/dhparam.pem
mkdir /etc/nginx/cert/ && curl https://ssl-config.mozilla.org/ffdhe2048.txt > /etc/nginx/cert/dhparam.pem

這邊加上 root, index, server_name
還有要把 default 的那三段也複製過來
這個註解或砍掉,用預設的 DNS 伺服器解析網址就可以了
建立軟連結,將網站設為啟用
ln -s /etc/nginx/sites-available/2023ironman.miku3920.net /etc/nginx/sites-enabled/2023ironman.miku3920.net

重新載入設定檔
sudo systemctl reload nginx
第七步
測試自動更新憑證
sudo certbot renew --dry-run
查看所有定時任務
systemctl list-timers
第八步
用 HTTPS 開啟網站看看是否生效